package com.ship.dispatch.service.report;

import com.alibaba.fastjson.JSONObject;
import com.ship.common.business.service.BaseService;
import com.ship.common.datasource.annotation.Slave;
import com.ship.dispatch.bean.report.ReportItem;
import com.ship.dispatch.bo.ItemStatisticsSimpleBo;
import com.ship.dispatch.model.dto.report.*;
import com.ship.dispatch.vo.report.DataContentByTypeVo;
import com.ship.dispatch.vo.report.ReportInfoVo;

import java.text.ParseException;
import java.util.Date;
import java.util.List;

public interface ReportItemService extends BaseService<ReportItem> {

    /**
     * 根据不同展示类型选择不同接口
     * @param typeId  1：数字，2：柱状，3：饼状
     * @return
     */
    List<DataContentByTypeVo> getDataContentByType(Integer typeId,String portName);

    /**
     * 保存统计报表渲染表
     * @param reportItem
     * @return
     */
    ReportItem saveReportItem(ReportItem reportItem);
    /**
     * 查询统计报表渲染表
     * @return
     */
    List<ReportItem> selectReportItems();

    /**
     * 添加图表接口
     * @param reportItemDto
     * @return
     */
    void saveReportInfo(ReportItemDto reportItemDto);
    /**
     * 删除图表接口
     * @param id
     */
    void removeReportInfo(Long id);

    /**
     * 查看图表接口
     * @return
     */
    List<ReportInfoVo> selectReportInfos(ReportInfoDto reportInfoDto);
    /**
     * 更新图表接口(拖动更新)
     * @return
     */
    void updateReportInfo(List<UpdateReportInfoDto> updateReportInfoDtos);

    /**
     * 合同数量统计(所有类型的合同数量)
     * @param bo
     * @return
     */
    JSONObject contractAllTypeNums(ItemStatisticsSimpleBo bo);

    JSONObject statisticsCanalTraffic(ItemStatisticsSimpleBo bo);
    /**
     * 合同类型分布
     *
     * @param bo
     * @return
     */
    JSONObject contractTypeDistribution(ItemStatisticsSimpleBo bo);
    /**
     * 资源合同-备忘录统计
     *
     * @param bo
     * @return
     */
    JSONObject conResourceMemorandumTotal(ItemStatisticsSimpleBo bo);
    /**
     * 资源合同-主合同统计
     *
     * @param bo
     * @return
     */
    JSONObject conResourceMainTotal(ItemStatisticsSimpleBo bo);
    /**
     * 备忘录贸易类型分布
     *
     * @param bo
     * @return
     */
    JSONObject conResourceMemorandumTradeType(ItemStatisticsSimpleBo bo);
    /**
     * 备忘录类贸易模式分布
     *
     * @param bo
     * @return
     */
    JSONObject conResourceMemorandumTradeModel(ItemStatisticsSimpleBo bo);
    /**
     * 备忘录类贸易主体分布
     *
     * @param bo
     * @return
     */
    JSONObject conResourceMemorandumTradeBody(ItemStatisticsSimpleBo bo);
    /**
     * 备忘录交付方式分布
     *
     * @param bo
     * @return
     */
    JSONObject conResourceMemorandumDeliveryType(ItemStatisticsSimpleBo bo);
    /**
     * 备忘录状态分布
     *
     * @param bo
     * @return
     */
    JSONObject conResourceMemorandumStatus(ItemStatisticsSimpleBo bo);

    /**
     * 主合同贸易主体分布
     *
     * @param bo
     * @return
     */
    JSONObject conResourceMainTradeBody(ItemStatisticsSimpleBo bo);

    /**
     * 船运合同统计
     * @param bo
     * @return
     */
    JSONObject conShippingTotal(ItemStatisticsSimpleBo bo);

    /**
     * 船运合同类型分布
     * @param bo
     * @return
     */
    JSONObject conShippingContractType(ItemStatisticsSimpleBo bo);

    /**
     * 不同类型备忘录状态分布
     *
     * @param bo
     * @return
     */
    JSONObject memorandumTypeStatus(ItemStatisticsSimpleBo bo);

    /**
     * 船运合同贸易主体分布
     * @param bo
     * @return
     */
    JSONObject conShippingTradeBody(ItemStatisticsSimpleBo bo);

    /**
     * 船舶租入贸易主体分布
     * @param bo
     * @return
     */
    JSONObject conShippingRentTradeBody(ItemStatisticsSimpleBo bo);

    /**
     * 船运合同类型及贸易主体分布
     * @param bo
     * @return
     */
    JSONObject conShippingContractTypeAndTradeBody(ItemStatisticsSimpleBo bo);
    /**
     * 船运合同类型及状态分布
     * @param bo
     * @return
     */
    JSONObject conShippingContractTypeAndStatus(ItemStatisticsSimpleBo bo);
    /**
     * 根据数据源获取相关数据
     * @param dto
     * @return
     */
    Object getDataContentByKey(getReportDataInfoDto dto) throws ParseException;

    /**
     * LNG船舶状态分布
     *
     * @param bo
     * @return
     */
    @Slave
    JSONObject lngShipStatus(ItemStatisticsSimpleBo bo);
    /**
     * LNG船舶船型分布
     *
     * @param bo
     * @return
     */
    @Slave
    JSONObject lngShipTypeGroup(ItemStatisticsSimpleBo bo);

    /**
     * LNG船舶船龄分布
     *
     * @param bo
     * @return
     */
    @Slave
    JSONObject lngShipYearOfBuild(ItemStatisticsSimpleBo bo);

    /**
     * LNG船舶主机类型分布
     *
     * @param bo
     * @return
     */
    @Slave
    JSONObject lngShipMainEngineType(ItemStatisticsSimpleBo bo);

    /**
     * LNG船舶建造船厂分布
     *
     * @param bo
     * @return
     */
    @Slave
    JSONObject lngShipbuilder(ItemStatisticsSimpleBo bo);

    /**
     * 更新统计渲染表
     *
     * @param reportItemUpdateDto
     * @return
     */
    ReportItem updateReportItem(ReportItemUpdateDto reportItemUpdateDto);

    /**
     * 推送工作台
     * @param id
     */
    void saveWorkbench(Long id);

    /**
     * 查询工作台
     */
    List<ReportInfoVo> selectWorkbenchs(WorkbenchAllDto workbenchAllDto);

    /**
     * LNG船舶建造国家分布
     *
     * @param bo
     * @return
     */
    @Slave
    JSONObject lngShipCountryOfBuild(ItemStatisticsSimpleBo bo);

    /**
     * LNG船舶船级社分布
     *
     * @param bo
     * @return
     */
    @Slave
    JSONObject lngShipClassificationSociety(ItemStatisticsSimpleBo bo);

    /**
     * LNG船舶经营公司分布
     *
     * @param bo
     * @return
     */
    @Slave
    JSONObject lngShipOperator(ItemStatisticsSimpleBo bo);

    /**
     * 根据数据源id获取相关数据
     *
     * @param reportInfoDataDto
     * @return
     */
    Object getDataContentById(ReportInfoDataDto reportInfoDataDto) throws ParseException;

    /**
     * 删除工作台数据看板内容
     *
     * @param id
     * @return
     */
    void removeWorkbench(Long id);

    /**
     * 图表数据缓存更新
     */
    void reportItemCacheUpdate();

    List<DataContentByTypeVo> getDataSourceInfo(String sourceName);

    List<DataContentByTypeVo> getTableTypeBySource(String sourceName);
}
